package com.lushuan.ch10_springboot_security.controller;

import com.lushuan.ch10_springboot_security.entity.UserDTO;
import com.lushuan.ch10_springboot_security.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 用户管理系统，模拟安全注解使用方式
 * 1. `@PreAuthorize`: 方法执行前的权限检查
 * 2. `@PostAuthorize`: 方法执行后的权限检查
 * 3. `@Secured`: 指定角色列表
 * 4. `@RolesAllowed`: 同@Secured，但是是JSR-250注解
 * 5. `@PreFilter`: 过滤集合类型的方法参数
 * 6. `@PostFilter`: 过滤方法返回的集合
 */

@RestController
@RequestMapping("/api/users")
public class UserManagementController {

    @Autowired
    private UserService userService;

    // 普通用户只能查看自己的信息
    @PreAuthorize("hasRole('USER') and #username == authentication.principal.username")
    @GetMapping("/{username}")
    public UserDTO getUserInfo(@PathVariable String username) {
        return userService.getUserInfo(username);
    }

    // 管理员可以查看所有用户信息
    @PreAuthorize("hasRole('ADMIN')")
    @GetMapping
    public List<UserDTO> getAllUsers() {
        return userService.getAllUsers();
    }
}
